/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Data;

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;


public class Pessoa extends Object{
    
    protected HashMap<String,Object> hmPessoa = new HashMap<String, Object> ();
    public static SimpleDateFormat dateCreator = new SimpleDateFormat("dd/MM/yyyy");
    public static SimpleDateFormat dateFormatSql = new SimpleDateFormat("yyyy-MM-dd");
    final String cpf = "CPF";
    final String nome = "NOME";
    final String sobrenome = "SOBRENOME";
    final String rg = "RG";
    final String dataNascimento = "DATA_NASCIMENTO";
    final String logradouro = "LOGRADOURO";
    final String numero = "NUMERO";
    final String bairro = "BAIRRO";
    final String cidade = "CIDADE";
    final String estado = "ESTADO";
    final String cep = "CEP";
    final String telefone = "TELEFONE";
    final String sexo = "SEXO";
    final String apelido = "APELIDO";
    final String celular = "CELULAR";
    final String rp = "RP";

    public Pessoa(Pessoa p){
        this.hmPessoa.putAll((Map<? extends String, ? extends Object>) p.hmPessoa.clone());
    }

    public Pessoa(String cpf, String nome, String sobrenome, String apelido, String rg, String dataNascimento, String logradouro, String numero, String bairro, String cidade,
          String estado, String cep, String telefone, String celular, String sexo) throws ParseException{


      hmPessoa.put(this.cpf , cpf);
      hmPessoa.put(this.nome , nome);
      hmPessoa.put(this.sobrenome , sobrenome);
      hmPessoa.put(this.rg , rg);
      System.out.println("DATA NASCIMENTO: " + dataNascimento);
      if(dataNascimento.compareTo("") != 0)
        hmPessoa.put(this.dataNascimento , dateCreator.parse(dataNascimento));
      else
          hmPessoa.put(this.dataNascimento , "");
      hmPessoa.put(this.logradouro , logradouro);
      hmPessoa.put(this.numero , numero);
      hmPessoa.put(this.bairro , bairro);
      hmPessoa.put(this.cidade , cidade);
      hmPessoa.put(this.estado , estado);
      hmPessoa.put(this.cep , cep);
      hmPessoa.put(this.telefone , telefone);
      hmPessoa.put(this.sexo , sexo.substring(0,1));
      hmPessoa.put(this.apelido , apelido);
      hmPessoa.put(this.celular , celular);
    }

    public Pessoa(String nome, String sobrenome, String cpf){
      hmPessoa.put(this.nome , nome);
      hmPessoa.put(this.sobrenome , sobrenome);
      hmPessoa.put(this.cpf , cpf);
    }

    public Pessoa(String nome, String sobrenome, String cpf, String apelido){
      hmPessoa.put(this.nome , nome);
      hmPessoa.put(this.sobrenome , sobrenome);
      hmPessoa.put(this.cpf , cpf);
      hmPessoa.put(this.apelido , apelido);
    }

    public Pessoa(){
        
    }

    public void setData(String key, Object value){
        if (value == null){
            return;
        }
        if (key.equals("CPF")) {
            hmPessoa.put(key, value);
        }

        if (value instanceof String && ((String)value).length() == 0){
            return;
        }
        hmPessoa.put(key,value);
    }

    public Object getData(String key){
        if (hmPessoa.containsKey(key))
             return hmPessoa.get(key);
        else return null;
    }

    public int getRp() {
        return (Integer) hmPessoa.get(this.rp);
    }

    public void setRp(int rp) {
        //this.rp = rp;
        this.hmPessoa.put(this.rp, rp);
    }

    public String getApelido() {
        return (String)hmPessoa.get(this.apelido);
        //return apelido;
    }

    public void setApelido(String apelido) {
        this.hmPessoa.put(this.apelido, apelido);
        //this.apelido = apelido;
    }

        public String getCelular() {
        //return celular;
        return (String)this.hmPessoa.get(this.celular);
    }

    public void setCelular(String celular) {
        //this.celular = celular;
        this.hmPessoa.put(this.celular, celular);
    }

    public String getCep() {
        //return cep;
        return (String) this.hmPessoa.get(this.cep);
    }

    public void setCep(String cep) {
        //this.cep = cep;
        this.hmPessoa.put(this.cep, cep);
    }

    public String getCidade() {
        //return cidade;
        return (String) this.hmPessoa.get(this.cidade);
    }

    public void setCidade(String cidade) {
        //this.cidade = cidade;
        this.hmPessoa.put(this.cidade, cidade);
    }

    public String getCpf() {
        //return cpf;
        return (String) this.hmPessoa.get(this.cpf);
    }

    public void setCpf(String cpf) {
        //this.cpf = cpf;
       this.hmPessoa.put(this.cpf, cpf);
    }

    public String getDataNascimento() {
        if (this.hmPessoa.containsKey(this.dataNascimento)){
            return Pessoa.dateCreator.format(this.hmPessoa.get(this.dataNascimento));
        } else return null;

        //return dataNascimento;
    }

    public Date getDataNascimentoObj() {
        return (Date) this.hmPessoa.get(this.dataNascimento);
        //return dataNascimento;
    }

    public String getDataNascimentoSql() {
        //return dataNascimento;
        return "'" + Pessoa.dateFormatSql.format(this.hmPessoa.get(this.dataNascimento)) + "'";        
    }

    public void setDataNascimento(String dataNascimento) throws ParseException {
        //this.dataNascimento = dataNascimento;
        //this.hmPessoa.put(this.dataNascimento, dataNascimento);
        hmPessoa.put(this.dataNascimento , dateCreator.parse(dataNascimento));

    }

        public String getLogradouro() {
        //return logradouro;
        return (String) this.hmPessoa.get(this.logradouro);
    }

    public void setLogradouro(String logradouro) {
        //this.logradouro = logradouro;
        this.hmPessoa.put(this.logradouro,logradouro);
    }

        public String getEstado() {
        //return estado;
        return (String) this.hmPessoa.get(this.estado);
    }

    public void setEstado(String estado) {
        //this.estado = estado;
        this.hmPessoa.put(this.estado, estado);
    }

        public String getNome() {
        //return nome;
        return (String) this.hmPessoa.get(this.nome);
    }

    public void setNome(String nome) {
        //this.nome = nome;
        this.hmPessoa.put(this.nome, nome);
    }

    public String getNumero() {
        return (String) this.hmPessoa.get(this.numero);
        //return numero;
    }

    public void setNumero(String numero) {
        this.hmPessoa.put(this.numero, numero);
        //this.numero = numero;
    }

        public String getRg() {
        //return rg;
        return (String) this.hmPessoa.get(this.rg);
    }

    public void setRg(String rg) {
        //this.rg = rg;
        this.hmPessoa.put(this.rg, rg);
    }

        public String getSexo() {
        //return sexo;
        return (String) this.hmPessoa.get(this.sexo);
    }

    public void setSexo(String sexo) {
        //this.sexo = sexo;
        this.hmPessoa.put(this.sexo, sexo);
    }

    public String getSobrenome() {
        //return sobrenome;
        return (String) hmPessoa.get(this.sobrenome);
    }

    public void setSobrenome(String value) {
        //this.sobrenome = sobrenome;
        this.hmPessoa.put(this.sobrenome, sobrenome);
    }

    public String getBairro() {
        //return bairro;
       return (String) hmPessoa.get(this.bairro);
    }

    public void setBairro(String bairro) {
        //this.bairro = bairro;
        this.hmPessoa.put(this.bairro, bairro);
    }

        public String getTelefone() {
        //return telefone;
        return (String)this.hmPessoa.get(this.telefone);
    }

    public void setTelefone(String telefone) {
        //this.telefone = telefone;
        this.hmPessoa.put(this.telefone, telefone);
    }

    public String toString() {
        StringBuilder sb = new StringBuilder("{{");
        for (String campo : hmPessoa.keySet()){
            if (hmPessoa.get(campo) instanceof Date)
                sb.append(campo + ":" + dateCreator.format((Date)hmPessoa.get(campo)));
            else
                sb.append(campo + ":" + hmPessoa.get(campo));
            sb.append("|");
        }
        sb.deleteCharAt(sb.lastIndexOf("|"));
        return sb.toString();
    }

}
